<?php

namespace Transaccion\Controller\Service;

use Zend\Db\Adapter\Adapter;
use Componentes\Controller\UtilsArrayController;
use Transaccion\Model\Entity\Horario;
use Transaccion\Controller\Service\GenericService;
use Transaccion\Model\Dao\HorarioDAO;
use Componentes\Controller\VariablesGlobales;

//SERVICIO
class HorarioService extends GenericService {

    /**
     * @var Zend\Db\Adapter\Adapter 
     */
    private $dbAdapter;
    private static $horarioService;

    /**
     * @param \Zend\Db\Adapter\Adapter $dbAdapter
     */
    private function __construct(Adapter $dbAdapter) {
        $this->dbAdapter = $dbAdapter;
    }

    public static function getInstance($adapter) {
        if (self::$horarioService == null) {
            self::$horarioService = new HorarioService($adapter);
        }
        return self::$horarioService;
    }

    public function getHorarioDao() {
        return HorarioDAO::getInstance($this->dbAdapter);
    }

    /**
     * @param type $id
     * @return type
     */
    public function getRegistros($idSeccion) {
        $success = true;
        $mensaje = null;
        $idLapso = VariablesGlobales::$lapsoDeInscripcion;
        $data = $this->obtenerArrayMateriasSegunIdSeccion($idSeccion, $idLapso);
        if ($data == null) {
            $success = false;
            $mensaje = 'NO EXISTE LA SECCION';
        }
        return UtilsArrayController::organizarOutput($success, $data, $mensaje);
    }

    /**
     * @param type $id
     * @return type
     */
    public function getSegunIdMateriaIdSeccion($idSeccion, $idMateria, $idLapso) {
        $success = true;
        $mensaje = null;
        $data = $this->obtenerArrayMateriasSegunIdMateriaIdSeccion($idMateria, $idSeccion, $idLapso);
        if ($data == null) {
            $success = false;
            $mensaje = 'NO EXISTE EL REGISTRO';
        }
        return UtilsArrayController::organizarOutput($success, $data, $mensaje);
    }

//------Retornan array----------

    public function obtenerArrayMateriasSegunIdMateriaIdSeccion($idMateria, $idSeccion, $idLapso) {
        $registros = $this->getHorarioDao()->getHorarioPorSeccionYMateria($idMateria, $idSeccion, $idLapso);
        $data = UtilsArrayController::llenarData($registros);
        return $data;
    }

    public function obtenerArrayMateriasSegunIdSeccion($idSeccion, $idLapso) {
        $registros = $this->getHorarioDao()->getHorarioPorSeccion($idSeccion, $idLapso);
        $data = UtilsArrayController::llenarData($registros);
        return $data;
    }

//--------------------------------
//------Retornan los objetos-------

    public function obtenerHorarioSegunIdHora($array, $idHora) {
        $horario = null;
        for ($i = 0; $i < count($array); $i++) {
            $idHoraArray = $array[$i]['shoraid'];
            if ($idHoraArray == $idHora) {
                $horario = new Horario($array[$i]);
            }
        }
        return $horario;
    }

//---------------------------------
}
